#include <htc.h>
#include <stdio.h>
#include "lcd.h"
#include "rs232.h"
#include "modem.h"
#include "883.h"


#define EVER ;;

#define TEL_NUMBER "+39320123456"

enum STATUS{
	WAIT_READ = 0,
	WAIT_SMS,
	WAIT_WRITE
}status;


void
main(void)
{
	int ret;
	char key[26];
	char* key1;
	
	TRISC4=0;          //DATA 4 dell'LCD 
	TRISC5=0;          //DATA 5 
	TRISC6=0;          //DATA 6 
	TRISC7=0;          //DATA 7 
	TRISA4=0;          //RS 
	TRISA5=0;          //E 
	//TRISA=1;            // setta le porte A del pic come entrate
	   
	    
	DelayMs(100);    // serve per stabilizzare l'alimentazione dell'lcd (l'lcd è molto lento) 
	LCD_INIT();       // INDISPENSABILE serve ad inizializzare l'LCD 
	DelayMs(250);    // piccolo ritardo per completare l'inizializzazione (facoltativo) 
	LCD_CLEAR();  // Cancella il display  
	DelayUs(200);     // Altra piccola pausa (facoltativo) 
	LCD_CMD(LCD_line1);                               //qui dico che devo cominciare a scrivere dal primo carattere del primo rigo 
	LCD_PUTS("SMS Manager V. 1.0");     // ecco come si mette una stringa di caratteri 
	DelayUs(1000);  
	status = WAIT_READ;
	
	initModem();
	
	for(EVER){
		switch (status){
			case WAIT_READ:
				LCD_CLEAR();
				LCD_CMD(LCD_line1);
				LCD_PUTS("INSERT KEY");
				LCD_CMD(LCD_line2);
				LCD_PUTS("AND PRESS READ");
				if(1/*Premuto tasto*/){
					//TODO:Leggo il trasponder
					ret = readCryptoKey(key);
					if(!ret){
						LCD_CLEAR();
						LCD_CMD(LCD_line1);
						LCD_PUTS("SENDING INCODE");
						LCD_CMD(LCD_line2);
						LCD_PUTS(" ");
						//TODO:Invio SMS
						ret = sendSMS(key, TEL_NUMBER);
						status = WAIT_SMS;
					}
					else{
						LCD_CLEAR();
						LCD_CMD(LCD_line1);
						LCD_PUTS("NOT A TEXAS CRYPTO");
						LCD_CMD(LCD_line2);
						LCD_PUTS("KEY ");
					}
				}
			break;
			case WAIT_SMS:
				if(1/*SMS arrivato*/){
					LCD_CLEAR();
					LCD_CMD(LCD_line1);
					LCD_PUTS("INSERT BLANK KEY");
					LCD_CMD(LCD_line2);
					LCD_PUTS("AND PRESS WRITE");
					status = WAIT_WRITE;
				}
			break;
			case WAIT_WRITE:
				if(1/*Premuto tasto*/){
					LCD_CLEAR();
					LCD_CMD(LCD_line1);
					LCD_PUTS("WRITING KEY");
					LCD_CMD(LCD_line2);
					LCD_PUTS("");
					//TODO:Scrittura chiave
					if(1/*Scrittura Ok*/){
						LCD_CLEAR();
						LCD_CMD(LCD_line1);
						LCD_PUTS("KEY WRITTEN");
						LCD_CMD(LCD_line2);
						LCD_PUTS("SUCCESSFULLY ");
						DelayUs(1000);
						status = WAIT_READ;
					}
					else{
						LCD_CLEAR();
						LCD_CMD(LCD_line1);
						LCD_PUTS("ERROR WRITING");
						LCD_CMD(LCD_line2);
						LCD_PUTS("KEY ");
						DelayUs(1000);
						status = WAIT_READ;
					}
				}
			break;
			default:
			break;
		};
	}
}
